#include <unistd.h>
#include<iostream>
#include<string>
#include <sys/types.h>
using namespace std;

// .考察pipe函数的使用， 以及对pipe函数参数的理解，同时考察对文件描述符的理解
// 2.要求：先创建管道， 进而创建子进程， 父子进程使用管道进行通信
// 父进程向管道当中写“i am father”， 
// 子进程从管道当中读出内容, 并且打印到标准输出
int main()
{
  //父进程先创建管道
  int fds[2];
  //fds[0]读 fds[1]写
  pipe(fds);
  //fork出子进程
  pid_t pid=fork();
  if(pid<0)
  {
    cerr<<"fork子进程出错"<<endl;
    exit(1);
  }
  else if(pid==0)
  {
    //关闭写端
    close(fds[1]);
    //子进程读取
    char buff[1024];
    size_t n =read(fds[0],buff,1024);
    buff[n]='\0';
    printf("%s",buff);
    cout<<endl;
  }
  else 
  {
    //父进程写入
    close(fds[0]);
    string mess = "i am father";
    write(fds[1],mess.c_str(),mess.size());
  
  }
  return 0;
}